package pers.karl.export.database.enums;

/**
 * oracle数据类型
 */
public enum OracleDataTypeEnum {

    TIMESTAMP,

    DATE,

    NUMBER,

    RAW,
    CHAR,
    NVARCHAR2,
    VARCHAR2,

    BLOB,
    CLOB,
    UROWID
    ;

    OracleDataTypeEnum() {
    }

    /**
     * 获取字段类型
     * @param dataType 数据类型
     * @param dataLength 长度
     * @param dataPrecision 整数位长度
     * @param dataScale 小数位长度
     * @return
     */
    public static String getColumnType(String dataType, int dataLength, int dataPrecision, int dataScale) {

        if(NUMBER.name().equalsIgnoreCase(dataType)) {
            StringBuilder stringBuilder = new StringBuilder();

            if(dataScale == 0) {
                stringBuilder.append("INT");

                if(dataPrecision > 0) {
                    stringBuilder.append("(").append(dataPrecision).append(")");
                }
                return stringBuilder.toString();
            }

            stringBuilder.append("NUMBER").append("(").append(dataPrecision)
                    .append(",")
                    .append(dataScale)
                    .append(")");
            return stringBuilder.toString();
        }

        if(RAW.name().equalsIgnoreCase(dataType)
            || CHAR.name().equalsIgnoreCase(dataType)
            || NVARCHAR2.name().equalsIgnoreCase(dataType)
            || VARCHAR2.name().equalsIgnoreCase(dataType)) {
            return dataType.toUpperCase() + "(" + dataLength + ")";
        }

        if(dataType.startsWith(TIMESTAMP.name())) {
            return dataType.toUpperCase();
        }
        if(DATE.name().equalsIgnoreCase(dataType)) {
            return dataType.toUpperCase();
        }

        if(UROWID.name().equalsIgnoreCase(dataType)
            || BLOB.name().equalsIgnoreCase(dataType)
            || CLOB.name().equalsIgnoreCase(dataType)) {
            return dataType.toUpperCase();
        }

        throw new IllegalArgumentException("unknown data type : " + dataType);
    }

}
